
// 这里使用 "全局的对象" 来表示 global对象，以便于与 "全局对象" 区分
// 因为 "全局对象" 表示 是处在全局作用域里的多个对象。
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

// 在 node.js 环境下运行 JavaScript 文件时使用的并不是全局作用域
console.log( arguments.callee ); // 这是个匿名函数

// 在 node.js 环境下可以使用 global 变量来获得 "全局的对象"
console.log( global );

console.log( '- - - - - - - - - - - - - - -' );

// for/in 遍历 global
// for/in 语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性
for( let name in global ){
    console.log( name );
}

console.log( '- - - - - - - - - - - - - - -' );

// 使用 Object.keys 获取 global 所有属性名
let keys = Object.keys( global );
// 注意这个函数是 forEach 函数内部调用的函数
let fn = function( element , index , array ){
    console.log( element );
}
// forEach 内部会遍历数组，每取得一个元素后都会调用fn函数
// forEach 内部调用 fn 函数时会依次传入三个参数: 元素、索引、数组
keys.forEach( fn );

console.log( '- - - - - - - - - - - - - - -' );

// 使用 Object.getOwnPropertyNames 获取 global 所有属性名
let names = Object.getOwnPropertyNames( global );
// 注意这里所使用的箭头函数的三个参数: 元素、索引、数组
names.forEach( (element,index,array) => { console.log( element ) } );

// 通过以上遍历操作可以知道:
// 所有的 "全局对象"(标准内置对象) 都是 绑定在 "全局的对象"(global) 上的